package dominio;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import persistencia.PersistentObject;
import dto.OrdenPedidoTO;
import dto.PedidoTO;

@Entity
@Table(name = "OrdenPedido")
public class OrdenPedido extends PersistentObject {
	private static final long serialVersionUID = 1L;

	@Column(name = "fecha", nullable = false, columnDefinition = "datetime")
	private Date fecha;

	@OneToOne
	@JoinColumn(name = "idCliente")
	private Cliente cliente;

	@OneToMany(cascade = CascadeType.ALL)
	@JoinColumn(name = "idOrden")
	private List<Pedido> pedidos;

	public OrdenPedido() {
		pedidos = new ArrayList<Pedido>();
	}

	public Date getFecha() {
		return fecha;
	}

	public void setFecha(Date fecha) {
		this.fecha = fecha;
	}

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public List<Pedido> getPedidos() {
		return pedidos;
	}

	public void agregarPedido(Pedido pedido) {
		pedidos.add(pedido);
	}

	public OrdenPedidoTO getDTO() {
		OrdenPedidoTO dto = new OrdenPedidoTO();
		dto.setId(id);
		dto.setFecha(fecha);
		if (cliente != null)
			dto.setCliente(cliente.getDTO());
		for (Pedido p : pedidos)
			dto.agregarPedido(p.getDTO());
		return dto;
	}

	public static OrdenPedido fromDTO(OrdenPedidoTO dto) {
		if (dto == null)
			return null;
		OrdenPedido o = new OrdenPedido();
		o.setId(dto.getId());
		o.setFecha(dto.getFecha());
		o.setCliente(Cliente.fromDTO(dto.getCliente()));
		for (PedidoTO p : dto.getPedidos())
			o.agregarPedido(Pedido.fromDTO(p));
		return o;
	}
}